<?php

/**
 * Clase abstracta para el acceso a la base de datos.
 * Esta clase ser la unica que acceda directamente a la base de datos
 *
 */
abstract class DBAModel {

    private static $db_host = 'localhost';
    private static $db_user = 'root';
    private static $db_pass = '';
    protected $db_name = 'betporra';
    protected $query;
    protected $rows = array();
    private $conn;
    private $last_id;

    // m�todos abstractos para las clases que hereden
    abstract public function get($id);

    abstract public function set($array_datos);

    abstract public function edit($array_datos);

    abstract public function delete($id);

    /**
     * M�todo para abrir la conexi�n con la base de datos
     */
    private function open_connection() {
        try {
            $this->conn = new PDO("mysql:host=" . self::$db_host . ";dbname={$this->db_name}", self::$db_user, self::$db_pass);
        } catch (PDOException $e) {
            die('Error: ' . $e->getMessage() . 'Archivo' . $e->getFile() . '[' . $e->getLine() . ']');
        }
    }

    /**
     *  M�todo para cerrar la conexi�n
     */
    private function close_connection() {
        unset($this->conn);
    }

    /**
     *  M�todo para ejecutar Insert, Update o Delete
     */
    protected function execute_single_query() {
        $this->open_connection();
        if (!$this->conn->query($this->query)) {
            $error = $this->conn->errorInfo();
            die('Error: ' . $error[2]);
        }
        $this->last_id = $this->conn->lastInsertId();
        $this->close_connection();
    }

    /**
     * M�todo para ejecutar SELECT, recupera los datos y los guarda en rows[]
     */
    protected function get_results_from_query() {
        $this->open_connection();
        //conn->query devuelve un PDOStatement que guardamos en $result
        if ($result = $this->conn->query($this->query)) {
            // Vamos cogiendo todas las filas con PDOStatement::fetch pasando como parámetro
            // PDO::FETCH_ASSOC para que devuelva sólo un array asociativo y no numérico
            //Primero limpio la propiedad rows por si contiene ya algún dato
            unset($this->rows);
            while ($this->rows[] = $result->fetch(PDO::FETCH_ASSOC));

            // $this->rows = $result->fetchAll(PDO::FETCH_ASSOC);

            $result->closeCursor();

            $this->close_connection();

            array_pop($this->rows);
        } else {
            $error = $this->conn->errorInfo();
            throw new Exception("Error al ejecutar la SQL: " . $error[2]);
        }
    }

    /**
     * Devuelve el �ltimo id autonum�rico insertado
     * @return int �ltimo id autonum�rico insertado
     */
    public function get_last_id() {
        return $this->last_id;
    }

}

/**
 * Modelo de datos de usuario.
 *
 */
class Usuario extends DBAModel {

    private $id;
    private $email;
    public $usuario;
    public $password;
    public $nombre;
    public $fecha_registro;
    public $fecha_ultimo_acceso;
    public $imagen;
    public $puntos;
    public $fecha_nacimiento;
    public $direccion;
    public $poblacion;
    public $provincia;
    public $cp;
    public $telefono;
    public $facebook;
    public $twitter;
    public $googleplus;
    public $codigo_activacion;
    public $activado;
    public $is_facebook;
    public $bloqueado;

    public function existe_usuario_email($email) {
        //Guardo la select en query
        $this->query = "SELECT email FROM usuarios WHERE email = '$email'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        //Comprobamos que nos ha devuelto una fila
        if (count($this->rows) == 1) {
            return true;
        } else {
            return false;
        }
    }

    public function existe_nombre_usuario($usuario) {
        //Guardo la select en query
        $this->query = "SELECT usuario FROM usuarios WHERE usuario = '$usuario'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        //Comprobamos que nos ha devuelto una fila
        if (count($this->rows) == 1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Obtiene los datos de un usuario y los guarda en las propiedades
     *
     * @param $email email del usuario que queremos obtener
     * @return Devuelve true si ha encontrado alg�n usuario y false si no lo ha encontrado
     */
    public function get($email) {
        // Insertamos la query
        $this->query = "SELECT * FROM usuarios WHERE email = '$email'";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                //Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Obtiene los datos de un usuario y los guarda en las propiedades
     *
     * @param $email email del usuario que queremos obtener
     * @return Devuelve true si ha encontrado alg�n usuario y false si no lo ha encontrado
     */
    public function get_by_usuario($usuario) {
        // Insertamos la query
        $this->query = "SELECT * FROM usuarios WHERE usuario = '$usuario'";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                //Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     */
    public function get_email() {
        return $this->email;
    }

    /**
     * 
     */
    public function get_id() {
        return $this->id;
    }

    /**
     * Funci�n que inserta un nuevo usuario con la clave codificada y el c�digo de activaci�n
     * @param $array_datos array asociativo con campos email, clave, nombre
     *
     */
    public function set($array_datos = array()) {
        //Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }

        //Codifico la clave
        $password = md5($password);
        //Formateamos la fecha
        $fecha_nac = date("Y-m-d", strtotime($fecha_nac));

        //Indicamos la query INSERT a ejecutar
        $this->query = "INSERT INTO usuarios
 				(email, usuario, password, nombre, fecha_registro, imagen, puntos, fecha_nacimiento, codigo_activacion, activado, is_facebook, bloqueado) 
				VALUES 
				('$email', '$usuario', '$password', '$nombre', now(), 'default.png', 50, '$fecha_nac', '$codigo_activacion', 0, 0, 0)";
        //Ejecutamos la query
        $this->execute_single_query();
    }

    /**
     * M�todo no implementado
     * @throws Exception;
     */
    public function edit($array_datos) {
        //Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        //Indicamos la query UPDATE a ejecutar
        $this->query = "UPDATE usuarios SET 
                            nombre = '$nombre',
                            fecha_nacimiento = '$fecha_nacimiento',
                            direccion = '$direccion',
                            poblacion = '$poblacion', 
                            provincia = '$provincia', 
                            cp = '$cp', 
                            facebook = '$facebook', 
                            twitter = '$twitter', 
                            googleplus = '$googleplus'
                        WHERE id = $id";

        //ejecutamos la query
        $this->execute_single_query();
    }

    /**
     * Metodo no implementado
     * @throws Exception;
     */
    public function delete($email) {
        throw new Exception('Método no implementado');
    }

    /**
     * Comprueba el e-mail y la clave de un usuario
     * @param unknown $email
     * @param unknown $clave
     * @return boolean Devuelve true si se ha encontrado al usuario y false
     * si no se ha encontrado
     */
    public function comprobar_login($email, $password) {
        if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
            if ($this->get($email)) {
                if ($this->password == md5($password) && $this->activado == 1) {
                    return true;
                }
            }
            return false;
        } else {
            if ($this->get_by_usuario($email)) {
                if ($this->password == md5($password) && $this->activado == 1) {
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * Actualiza el campo fecha_ultimo_acceso de la base de datos
     * @param $email email del usuario a actualizar
     */
    public function actualizar_fecha_ultimo_acceso($id) {
        $this->query = "UPDATE usuarios SET fecha_ultimo_acceso=now()
					WHERE id='$id'";
        $this->execute_single_query();
    }

    /**
     * Cambia la contraseña por una aleatoria
     * @param $email email del usuario a actualizar
     */
    public function restaurar_clave($email, $new_pass) {
        $this->query = "UPDATE usuarios SET password='$new_pass'
					WHERE email='$email'";
        $this->execute_single_query();
    }

    /**
     * comprobamos si existe alg�n usuario cuyo nombre de usuario codificado con md5 coincida con la cookie pasada como par�metro
     * @param unknown $valor_cookie nombre de usuario codificado con md5
     * @return Devuelve el nombre de usuario si encuentra el usuario y false si no lo encuentra
     */
    public function comprobar_cookie($valor_cookie) {
        $this->query = "select * from usuarios where md5(email) = '$valor_cookie'";
        $this->get_results_from_query();
        if (count($this->rows) == 1)
            return $this->rows[0]['email'];
        else
            return false;
    }

    /**
     * Actualiza los puntos despues de apostar
     * @param $email email del usuario a actualizar
     */
    public function actualizar_puntos_usuario($id, $puntos) {
        $this->query = "UPDATE usuarios SET puntos=puntos-$puntos
					WHERE id='$id'";
        $this->execute_single_query();
    }

    /**
     * Resetea los puntos del usuario
     * @param $email email del usuario a actualizar
     */
    public function resetear_puntos_usuario($id, $puntos) {
        $this->query = "UPDATE usuarios SET puntos=$puntos
					WHERE id='$id'";
        $this->execute_single_query();
    }

    /**
     * Obtenemos los puntos del usuario
     */
    public function obtener_puntos($usuario) {
        // Insertamos la query
        $this->query = "SELECT puntos FROM usuarios WHERE id = $usuario";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();

        return $this->rows[0]['puntos'];
    }

    /**
     * Cambia la contraseña del usuario
     */
    public function cambiar_clave($id, $password) {
        //codificamos la contraseña recibida
        $password = md5($password);

        //Indicamos la query UPDATE a ejecutar
        $this->query = "UPDATE usuarios SET 
                            password = '$password'
                        WHERE id = $id;";

        //ejecutamos la query
        $this->execute_single_query();
    }

    /**
     * Comprueba password 
     */
    public function comprobar_clave($id, $password) {
        //codificamos la contraseña recibida
        $password = md5($password);

        //Indicamos la query UPDATE a ejecutar
        $this->query = "select * from usuarios where id = $id AND password = '$password';";
        $this->get_results_from_query();
        if (count($this->rows) == 1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     * Cambia la imagen de usuario
     */
    public function modificar_imagen($id, $imagen) {
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE usuarios SET 
                                imagen='$imagen'
                                WHERE id = $id;
 				";
        $this->execute_single_query();
    }

    /**
     * Activa la cuenta
     */
    public function activar_usuario($codigo_activacion) {
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE usuarios SET activado=1 WHERE codigo_activacion = '$codigo_activacion';
 				";
        $this->execute_single_query();
    }

}

class Pronostico extends DBAModel {

    private $id;
    public $usuario;
    public $partido;
    public $goles_local;
    public $goles_visitante;
    public $acertada;
    public $fecha;

    /**
     * Obtiene los datos de un pronostico y los guarda en las propiedades
     *
     * @param $id del pronostico que queremos obtener
     * @return Devuelve true si ha encontrado algun pronostico y false si no lo ha encontrado
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM pronosticos WHERE id = $id";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                //Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     */
    public function get_id() {
        return $this->id;
    }

    /**
     * Funci�n que inserta un nuevo usuario con la clave codificada y el c�digo de activaci�n
     * @param $array_datos array asociativo con campos email, clave, nombre
     *
     */
    public function set($array_datos = array()) {
        //Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }

        //Indicamos la query INSERT a ejecutar
        $this->query = "INSERT INTO pronosticos
 				(usuario, partido, goles_local, goles_visitante, acertada, fecha) 
				VALUES 
				($usuario, $partido, $goles_local, $goles_visitante, 'Pendiente', now())";
        //Ejecutamos la query
        $this->execute_single_query();
    }

    /**
     * M�todo no implementado
     * @throws Exception;
     */
    public function edit($array_datos) {
        //Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        //Indicamos la query UPDATE a ejecutar
        $this->query = "UPDATE contactos SET 
				usuario = '$usuario',
                                partido = $partido,
                                goles_local = $goles_local,
                                goles_vositante = $goles_visitante,
                                acertada = $acertada, 
                                fecha = '$fecha', 
 				";

        //ejecutamos la query
        $this->execute_single_query();
    }

    /**
     * Metodo no implementado
     * @throws Exception;
     */
    public function delete($id) {
        throw new Exception('Método no implementado');
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function get_pronosticos_by_user($usuario, $partido) {
        // Insertamos la query
        $this->query = "SELECT * FROM pronosticos WHERE usuario =  $usuario and partido = $partido;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        //Comprobamos que nos ha devuelto una fila
        if (count($this->rows) == 1) {
            return $this->rows[0];
        } else {
            return false;
        }
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function get_pronosticos_by_porra($porra) {
        // Insertamos la query
        $this->query = "SELECT pronosticos.* FROM pronosticos
                        INNER JOIN partidos
                        ON partidos.id = pronosticos.partido
                        INNER JOIN porras
                        ON porras.id = partidos.porra
                        WHERE porras.id = $porra;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();

        return $this->rows;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function get_mis_pronosticos($usuario) {
        // Insertamos la query
        $this->query = "SELECT pronosticos.*, 
                        partidos.id as idpartido, partidos.fecha as fechapartido, partidos.equipo_local, partidos.equipo_visitante,
                        equipos_local.nombre as equipolocalnombre, equipos_visitante.nombre as equipovisitantenombre,
                        porras.id as idporra, porras.bote_porra, porras.puntos_apuesta,
                        jornadas.descripcion,
                        competiciones.nombre as competicionnombre, competiciones.imagen
                        FROM pronosticos
                        INNER JOIN partidos
                        ON partidos.id = pronosticos.partido
                        INNER JOIN equipos as equipos_local
                        ON equipos_local.id = partidos.equipo_local
                        INNER JOIN equipos as equipos_visitante
                        ON equipos_visitante.id = partidos.equipo_visitante
                        INNER JOIN porras
                        ON porras.id = partidos.porra
                        INNER JOIN jornadas
                        ON jornadas.id = porras.jornada
                        INNER JOIN competiciones
                        ON competiciones.id = jornadas.competicion
                        WHERE pronosticos.usuario = $usuario
                        GROUP BY porras.id
                        ORDER BY pronosticos.fecha desc;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();

        return $this->rows;
    }

    /**
     * Comprobar si el usuario ha apostado en una porra
     */
    public function comprobar_si_apostado($usuario, $partido1, $partido2) {
        $this->query = "SELECT * FROM pronosticos WHERE usuario = $usuario AND (partido = $partido1 OR partido = $partido2);";
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) >= 1) {
            return true;
        } else {
            return false;
        }
    }

}

class Equipo extends DBAModel {

    // Propiedades qeu deben coincidir con las de la tabla de la BBDD
    public $nombre;
    public $pais;
    public $escudo;
    private $id;

    /**
     * Obtiene todos los datos del equipo
     *
     * @param $id id
     *        	del equipo que queremos cargar sus datos.
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM equipos WHERE id = $id";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
        } else {
            die("Equipo no encontrado");
        }
    }

    /**
     * Inserta un Equipo con los datos pasador como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO equipos
 				(nombre, pais, escudo) 
				VALUES 
				('$nombre', '$pais', '$escudo')";
        // Ejecutamos la query
        $this->execute_single_query();

        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza un Equipo con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué equipo actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE equipos SET 
				nombre='$nombre', 
 				pais='$pais', 
 				escudo='$escudo'
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra un Equipo
     *
     * @param $id id
     *        	del equipo a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM equipos WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todos_equipos() {
        // Insertamos la query
        $this->query = "SELECT * FROM equipos";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

}

class Competicion extends DBAModel {

    public $nombre;
    public $pais;
    public $imagen;
    public $bote_competicion;
    private $id;

    /**
     * Obtiene todos los datos de Competicion
     *
     * @param $id id
     *        	de la competicion que queremos cargar sus datos.
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM competiciones WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return $this->rows;
        } else {
            return false;
        }
    }

    /**
     * Inserta una Competición con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO competiciones
 				(nombre, pais, imagen, bote_competicion) 
				VALUES 
				('$nombre', '$pais', '$imagen', $bote_competicion)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza una Competición con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué competición actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE competiciones SET 
				nombre='$nombre', 
 				pais='$pais', 
 				imagen='$imagen',
				bote_competicion=$bote_competicion
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Competición
     *
     * @param $id id
     *        	de la competición a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM competiciones WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todas_competiciones() {
        // Insertamos la query
        $this->query = "SELECT * FROM competiciones where prioridad > 0 order by prioridad desc;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

    /**
     * Obtiene el bote acumulado de esa competición
     */
    public function obtener_bote_competicion($competicion) {
        // Insertamos la query
        $this->query = "SELECT sum(porras.bote_porra) AS bote_competicion "
                . "FROM porras "
                . "INNER JOIN jornadas ON porras.jornada = jornadas.id "
                . "INNER JOIN competiciones ON jornadas.competicion = competiciones.id "
                . "WHERE competiciones.id = $competicion AND porras.disponible = 1";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        //devolvemos el resultado obtenido
        return $this->rows[0]['bote_competicion'];
    }

}

class Jornada extends DBAModel {

    private $id;
    public $descripcion;
    public $fecha;
    public $competicion;

    /**
     * Obtiene todos los datos de la jornada
     *
     * @param $id id
     *        	de la jornada que queremos cargar sus datos.
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM jornadas WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta una jornada con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO jornadas
 				(descripcion, fecha, competicion) 
				VALUES 
				('$descripcion', '$fecha', $competicion)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza una Jornada con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué jornada actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE Jornadas SET 
				descipcion='$descipcion', 
 				fecha='$fecha', 
				competicion=$competicion
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Jornada
     *
     * @param $id id
     *        	de la jornada a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM Jornadas WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todas_jornadas($competicion_id) {
        // Insertamos la query
        $this->query = "SELECT * FROM Jornadas WHERE competicion = $competicion_id";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

}

class Partido extends DBAModel {

    public $fecha;
    public $equipo_local;
    public $equipo_visitante;
    public $goles_local;
    public $goles_visitante;
    public $estado;
    public $porra;
    public $id_api;
    private $id;

    /**
     * Obtiene todos los datos del partidos
     *
     * @param $id id
     *        	del partidos que queremos cargar sus datos.
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM partidos WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta un partido con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO partidos
 				(fecha, equipo_local, equipo_visitante, goles_local, goles_visitante, estado, porra) 
				VALUES 
				('$fecha', '$equipo_local', '$equipo_visitante', $goles_local, $goles_visitante, $estado, $porra)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza un Partido con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué partido actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE Partidos SET  
 				fecha='$fecha', 
 				equipo_local='$equipo_local',
				equipo_visitante='$equipo_visitante',
				goles_local=$goles_local,
				goles_visitante=$goles_visitante,
				estado=$estado,
				porra=$porra
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Jornada
     *
     * @param $id id
     *        	de la jornada a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM Partidos WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todos_partidos() {
        // Insertamos la query
        $this->query = "SELECT * FROM partidos";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_partidos_porra($porra) {
        // Insertamos la query
        $this->query = "SELECT partidos.*, 
                        equipos_locales.nombre as equipo_local_nombre, 
                        equipos_locales.escudo as equipo_local_escudo, 
                        equipos_visitantes.nombre as equipo_visitante_nombre,
                        equipos_visitantes.escudo as equipo_visitante_escudo
                        FROM partidos
                        INNER JOIN equipos as equipos_locales on partidos.equipo_local = equipos_locales.id
                        INNER JOIN equipos as equipos_visitantes on partidos.equipo_visitante = equipos_visitantes.id
                        WHERE partidos.porra = $porra";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_partidos_porra_byUser($porra, $usuario) {
        // Insertamos la query
        $this->query = "SELECT partidos.*, pronosticos.*,
                        equipos_locales.nombre as equipo_local_nombre, 
                        equipos_locales.escudo as equipo_local_escudo, 
                        equipos_visitantes.nombre as equipo_visitante_nombre,
                        equipos_visitantes.escudo as equipo_visitante_escudo
                        FROM partidos
                        INNER JOIN equipos as equipos_locales on partidos.equipo_local = equipos_locales.id
                        INNER JOIN equipos as equipos_visitantes on partidos.equipo_visitante = equipos_visitantes.id
                        INNER JOIN pronosticos on pronosticos.partido = partidos.id
                        WHERE partidos.porra = $porra and pronosticos.usuario = $usuario
                        ORDER BY pronosticos.fecha desc;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Obtiene  la porra de un partido
     *
     * @param $id id
     *        	
     */
    public function obtener_porra($partido) {
        // Insertamos la query
        $this->query = "SELECT porra FROM partidos WHERE id = $partido";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        return $this->rows[0]['porra'];
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

}

class Porra extends DBAModel {

    private $id;
    public $fecha_inicio;
    public $fecha_fin;
    public $bote_jornada;
    public $puntos_apuesta;
    public $disponible;
    public $jornada;

    /**
     * Obtiene todos los datos de la porra
     *
     * @param $id id
     *        	de la porrra que queremos cargar sus datos.
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM porras WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta una jornada con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO porras
 				(fecha_inicio, fecha_fin, bote_jornada, puntos_apuesta, disponible, jornada) 
				VALUES 
				('$fecha_inicio', '$fecha_fin', $bote_jornada, $puntos_apuesta, $disponible, $jornada)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza una Porra con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué jornada actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE porras SET 
 				fecha_inicio='$fecha_inicio',
				fecha_fin='$fecha_fin',
				bote_jornada=$bote_jornada,
				puntos_apuesta=$puntos_apuesta,
				disponible=$disponible,
				jornada=$jornada
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Porra
     *
     * @param $id id
     *        	de la porra a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM porras WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todas_porras() {
        // Insertamos la query
        $this->query = "SELECT * FROM porras";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_porras_disponibles($competicion) {
        // Insertamos la query
        /* $this->query = "SELECT porras.*, jornadas.*, competiciones.nombre as competicion_nombre, partidos.* "
          . "FROM porras "
          . "INNER JOIN jornadas ON porras.jornada = jornadas.id "
          . "INNER JOIN competiciones ON jornadas.competicion = competiciones.id "
          . "INNER JOIN partidos ON porras.id = partidos.porra "
          . "WHERE porras.disponible = 1 AND jornadas.competicion = $competicion;"; */
        $this->query = "SELECT porras.*, 
				jornadas.id as idjornada,
				jornadas.descripcion,
				jornadas.fecha as fechajornada,
				jornadas.competicion,
				competiciones.nombre as competicion_nombre 
                        FROM porras 
                        INNER JOIN jornadas ON porras.jornada = jornadas.id 
                        INNER JOIN competiciones ON jornadas.competicion = competiciones.id 
                        WHERE porras.disponible = 1 AND jornadas.competicion = $competicion;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Aumenta el bote de la porra
     */
    public function aumentar_bote($porra, $puntos) {
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE porras SET 
 				bote_porra=bote_porra+$puntos
 				WHERE id = $porra
 				";
        $this->execute_single_query();
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function get_usuarios_by_porra($porra) {
        // Insertamos la query
        $this->query = "SELECT pronosticos.usuario, usuarios.imagen, usuarios.usuario
                        FROM pronosticos
                        INNER JOIN partidos
                        ON partidos.id = pronosticos.partido
                        INNER JOIN porras
                        ON porras.id = partidos.porra
                        INNER JOIN usuarios
                        ON usuarios.id = pronosticos.usuario
                        WHERE porras.id = $porra
                        group by pronosticos.usuario
                        ORDER BY pronosticos.usuario;";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();

        return $this->rows;
    }

    public function actualizar_estados_porras() {
        // Indicamos la query UPDATE a ejecutar
        $this->query = "UPDATE porras SET disponible = 1 WHERE now() BETWEEN fecha_inicio AND fecha_fin";
        $this->execute_single_query();

        // Indicamos la query UPDATE a ejecutar
        $this->query = "UPDATE porras SET disponible = 0 WHERE NOT now() BETWEEN fecha_inicio AND fecha_fin";
        $this->execute_single_query();
    }

}

class Regalo extends DBAModel {

    private $id;
    public $nombre;
    public $descripcion;
    public $imagen;
    public $disponible;
    public $precio;

    /**
     * Obtiene todos los datos de los regalos
     *
     * @param $id id
     *        	
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM regalos WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta un regalo con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO regalos
 				(nombre, descripcion, imagen, disponible, precio) 
				VALUES 
				('$nombre', '$descripcion', '$imagen', $disponible, $precio)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza un regalo con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué regalo actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE regalos SET 
                                nombre='$nombre',
                                descipcion='$descipcion', 
 				disponible=$disponible,
				precio=$precio
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Jornada
     *
     * @param $id id
     *        	de la jornada a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM regalos WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todos_regalos() {
        // Insertamos la query
        $this->query = "SELECT * FROM regalos";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

}

class Premio extends DBAModel {

    private $id;
    public $regalo;
    public $usuario;
    public $fecha;
    public $estado;

    /**
     * Obtiene todos los datos de los premios
     *
     * @param $id id
     *        	
     */
    public function get($id) {
        // Insertamos la query
        $this->query = "SELECT * FROM premios WHERE id = '$id'";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta un premio con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar excepto el id que es autonumérico
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO premios
 				(regalo, usuario, fecha, estado) 
				VALUES 
				($regalo, $usuario, now(), '$estado')";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Actualiza un premio con los datos pasados en el array $array_datos.
     *
     *
     * @param $array_datos array
     *        	asociativo con todos los datos a insertar. Debe
     *        	incluir el id para saber qué regalo actualizar, y no debe incluir el
     *        	id ya que no se va a permitir modificarlo.
     */
    public function edit($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query UPDATE a ejecutar
        $this->query = " UPDATE premios SET 
                                regalo=$regalo,
                                usuario=$usuario, 
 				fecha=$fecha,
				estado=$estado
 				WHERE id = $id 
 				";
        $this->execute_single_query();

        // Copiamos los nuevos datos a las propiedades del objeto
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }

        // Actualizamos la propiedad id con el último id insertado (autonumérico)
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Jornada
     *
     * @param $id id
     *        	de la jornada a borrar
     */
    public function delete($id) {
        $this->query = "DELETE FROM premios WHERE id = $id ";
        $this->execute_single_query();
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_todos_premios() {
        // Insertamos la query
        $this->query = "SELECT * FROM premios";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * 
     * @return array Devuelve un array de 2 dimensiones con todas las filas del
     * resultado
     */
    public function obtener_premios_by_user($usuario) {
        // Insertamos la query
        $this->query = "SELECT premios.*, regalos.nombre "
                . "FROM premios "
                . "INNER JOIN regalos "
                . "ON premios.regalo = regalos.id "
                . "WHERE usuario = $usuario "
                . "ORDER BY premios.fecha desc";
        // Obtenemos los datos y se guardan en rows[]
        $this->get_results_from_query();
        return $this->rows;
    }

    /**
     * Obtiene el valor de la propiedad id actual.
     *
     * @return contenido de la propiedad id del objeto actual
     */
    public function get_id() {
        return $this->id;
    }

}

class EquipoCompeticion extends DBAModel {

    public $equipo;
    public $competicion;

    /**
     * Obtiene todos los equipos de una competicion
     *
     * @param $id id
     *        	
     */
    public function get($competicion) {
        // Insertamos la query
        $this->query = "SELECT * FROM equipocompeticion WHERE competicion = $competicion";
        // Obtenemos los datos y se guardan en rows[];
        $this->get_results_from_query();
        // comprobamos si ha devuelto una sola fila
        if (count($this->rows) == 1) {
            // copiamos los datos del array rows[0] a las propiedades del objeto
            foreach ($this->rows [0] as $propiedad => $valor) {
                // Utiliza "variables variables"
                $this->$propiedad = $valor;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Inserta un equipo a una competicion con los datos pasados como parámetro
     *
     * @param $array_datos array
     *        	asociativo c
     *        	
     */
    public function set($array_datos = array()) {
        // Creamos variables desde los datos del array
        foreach ($array_datos as $campo => $valor) {
            $$campo = $valor;
        }
        // Indicamos la query INSERT a ejecutar
        $this->query = " INSERT INTO equipocompeticion
 				(equipo, competicion) 
				VALUES 
				($equipo, $competicion)";
        // Ejecutamos la query
        $this->execute_single_query();


        //Copiamos los nuevos datos a las propiedades del objeto 
        foreach ($array_datos as $campo => $valor) {
            $this->$campo = $valor;
        }
        //Actualizamos la propiedad id con el último id insertado (autonumérico) 
        $this->id = $this->get_last_id();
    }

    /**
     * Borra una Jornada
     *
     * @param $id id
     *        	de la jornada a borrar
     */
    public function delete($equipo) {
        $this->query = "DELETE FROM equipocompeticion WHERE equipo = $equipo AND competicion = $competicion";
        $this->execute_single_query();
    }

    public function edit($array_datos) {
        throw new Exception('Método no implementado');
    }

}

?>
